import os
from openai import OpenAI
from dotenv import load_dotenv

load_dotenv()

def _call_ai(system_prompt, user_content):
    """调用AI API的通用方法"""
    print(f"调用AI API，system_prompt: {system_prompt}, user_content: {user_content}")
    
    # 配置DeepSeek API客户端
    client = OpenAI(
        api_key=os.environ.get('DEEPSEEK_API_KEY'),
        base_url=os.environ.get('DEEPSEEK_BASE_URL')
    )
    
    try:
        response = client.chat.completions.create(
            model=os.environ.get('DEEPSEEK_MODEL'),
            messages=[
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": user_content}
            ],
            stream=False
        )
        return response.choices[0].message.content
    except Exception as e:
        raise Exception(f"AI API调用失败: {str(e)}")

def generate_global_role(project_description, progress_callback=None):
    """生成全局规范文档"""
    system_prompt = """你是一个专业的软件开发规范专家。请根据项目描述生成详细的全局开发规范文档。
    
    文档需要包含以下内容：
    1. 项目使用的主要编程语言
    2. 项目使用的主要编程环境
    3. 项目使用的文件目录结构
    4. 项目的基本设计原则
    5. 项目的设计目标
    6. 项目的用户体验目标
    7. 项目的文档和代码规范
    8. 项目的接口规范和接口策略
    
    请使用Markdown格式输出，内容要详细、专业且实用。"""
    
    user_content = f"项目描述：{project_description}"
    
    if progress_callback:
        progress_callback("生成全局规范", f"调用AI API，system_prompt: {system_prompt[:100]}..., user_content: {user_content[:100]}...")
    
    return _call_ai(system_prompt, user_content)

def generate_project_plan(project_description, global_role_content, progress_callback=None):
    """生成项目计划文档"""
    system_prompt = """你是一个专业的项目规划专家。请根据项目描述和全局规范生成详细的项目计划文档。
    
    文档需要包含以下内容：
    1. 功能需求规格说明
    2. 非功能需求
    3. 技术栈选型：确定前后端语言、框架、数据库、第三方服务等
    4. 数据模型设计：设计关键的数据库表和结构
    5. API设计：定义内部或对外的API接口规范
    6. 单元测试与整体项目测试计划
    
    请确保所有内容都参考并符合全局规范文档的要求。
    请使用Markdown格式输出，内容要详细、专业且实用。"""
    
    user_content = f"项目描述：{project_description}\n\n全局规范：{global_role_content}"
    
    if progress_callback:
        progress_callback("生成项目计划", f"调用AI API，system_prompt: {system_prompt[:100]}..., user_content: {user_content[:100]}...")
    
    return _call_ai(system_prompt, user_content)

def generate_detail_task(project_description, global_role_content, project_plan_content, progress_callback=None):
    """生成详细任务规划文档"""
    system_prompt = """你是一个专业的项目管理专家。请根据项目描述、全局规范和项目计划生成详细的详细任务规划文档。
    
    文档需要包含以下内容：
    1. 分解工作结构：将项目范围分解为更小、更易于管理的工作包
    2. 结构化输出任务之间的逻辑关系
    
    请确保所有内容都参考并符合全局规范文档和项目计划文档的要求。
    请使用Markdown格式输出，内容要详细、专业且实用。"""
    
    user_content = f"项目描述：{project_description}\n\n全局规范：{global_role_content}\n\n项目计划：{project_plan_content}"
    
    if progress_callback:
        progress_callback("生成详细任务", f"调用AI API，system_prompt: {system_prompt[:100]}..., user_content: {user_content[:100]}...")
    
    return _call_ai(system_prompt, user_content)

def generate_documentation(project_description, progress_callback=None):
    """生成所有文档的主函数"""
    # 生成全局规范
    global_role = generate_global_role(project_description, progress_callback)
    
    # 生成项目计划（参考全局规范）
    project_plan = generate_project_plan(project_description, global_role, progress_callback)
    
    # 生成详细任务规划（参考全局规范和项目计划）
    detail_task = generate_detail_task(project_description, global_role, project_plan, progress_callback)
    
    return global_role, project_plan, detail_task